/**
 *
 *
 * @用途 监测系统更新，以及更新操作
 *
 * @author 黄敏
 * @创建时间 2021-11-28 14:05
 **/

import { createRuntimeState } from 'global-state'
import { ipcMain } from 'electron'

import pkg from 'electron-updater'
import { updateInfo } from '~types/updater'
const { autoUpdater } = pkg

const updateStatus = createRuntimeState<updateInfo>('updateStatus', {
  status: '未检测'
})

// 处理更新操作
autoUpdater.autoInstallOnAppQuit = false // 退出时自动安装
// autoUpdater.forceDevUpdateConfig = true
// 更新检测
function checkForUpdates() {
  // 和之前package.json配置的一样
  const url = 'https://ici.oss-accelerate.aliyuncs.com/fieldano-updater/'

  autoUpdater.setFeedURL(url)

  autoUpdater.checkForUpdates()
}
ipcMain.on('系统检查更新', checkForUpdates)

// 安装操作
ipcMain.on('系统更新并重启', () => {
  autoUpdater.quitAndInstall(true, true)
})

// 更新错误
autoUpdater.on('error', function (error: any) {
  updateStatus.set({ status: '检测出错', msg: error.message })
})

// 检查中
autoUpdater.on('checking-for-update', function () {
  // log.info('检查中')
  updateStatus.set({ status: '正在检测' })
})

// 发现新版本
autoUpdater.on('update-available', function (info) {
  // log.info('发现新版本', info)
  updateStatus.set({ status: '有新版', info: { version: info.version } })

  // info 格式 {
  //   version: '8.2.1',
  //   files: [
  //     {
  //       url: 'field flint Setup 8.2.1.exe',
  //       sha512: '08AEdtL34TRrIRWaZRT15QBrLF3WGEhgl8H2u4Mj3S9zQq1cIb2eXjY4Vz11Wh4VpVXe9U1vVbJpH0bxYN2wrg==',
  //       size: 64937554
  //     }
  //   ],
  //   path: 'field flint Setup 8.2.1.exe',
  //   sha512: '08AEdtL34TRrIRWaZRT15QBrLF3WGEhgl8H2u4Mj3S9zQq1cIb2eXjY4Vz11Wh4VpVXe9U1vVbJpH0bxYN2wrg==',
  //   releaseDate: '2020-04-01T07:34:06.105Z'
  // }
})

// 当前版本为最新版本
autoUpdater.on('update-not-available', function (info) {
  // log.info('当前版本为最新版本', info)
  updateStatus.set({ status: '无更新', info: { version: info.version } })
})

// 更新下载进度事件
autoUpdater.on('download-progress', function (progressObj) {
  updateStatus.set({
    status: '正在下载',
    percent: Math.floor(progressObj.percent)
  })
  // {
  //   total: 64937554,
  //   delta: 1502200,
  //   transferred: 5001717,
  //   percent: 7.702348936641499,
  //   bytesPerSecond: 1226813
  // }
})

autoUpdater.on('update-downloaded', function (info) {
  // log.info('更新完成', event)
  updateStatus.set({ status: '下载完成', info: { version: info.version } })
})

checkForUpdates()
